package tpo.modelo;

import java.util.Date;

import tpo.to.ClienteDTO;

public class Cliente {
	private static int proximoCodigo = 1;
	private int codigo;
	private String nombre;
	private String apellido;
	private Date fechaNacimiento;
	private String domicilio;
	private String telefono;
	private String dni;
	private String sexo;
	private String nacionalidad;
	private String usuario;
	private String password;
	private boolean habilitado;
	
	public Cliente(String nombre, String apellido, Date fechaNacimiento,
			String domicilio, String telefono, String dni, String sexo,
			String nacionalidad, String usuario, String password) {
		this.codigo = getProximoCodigo();
		this.nombre = nombre;
		this.apellido = apellido;
		this.fechaNacimiento = fechaNacimiento;
		this.domicilio = domicilio;
		this.telefono = telefono;
		this.dni = dni;
		this.sexo = sexo;
		this.nacionalidad = nacionalidad;
		this.usuario = usuario;
		this.password = password;
		this.habilitado = true;
	}
	
	public Cliente(String nombre, String apellido, Date fechaNacimiento,
			String domicilio, String telefono, String dni, String sexo,
			String nacionalidad) {
		this.codigo = getProximoCodigo();
		this.nombre = nombre;
		this.apellido = apellido;
		this.fechaNacimiento = fechaNacimiento;
		this.domicilio = domicilio;
		this.telefono = telefono;
		this.dni = dni;
		this.sexo = sexo;
		this.nacionalidad = nacionalidad;
		this.habilitado = true;
	}

	private int getProximoCodigo() {
		return proximoCodigo++;
	}
	
	public boolean sosCliente(int codigo) {
		return this.codigo == codigo;
	}
	
	public void modificarDatosPersonales(String domicilio, String telefono) {
		this.domicilio = domicilio;
		this.telefono = telefono;
	}
	
	public void modificarDatos(String nombre, String apellido, Date fechaNacimiento,
			String domicilio, String telefono, String dni, String sexo,
			String nacionalidad, String usuario, String password) {
		this.nombre = nombre;
		this.apellido = apellido;
		this.fechaNacimiento = fechaNacimiento;
		this.domicilio = domicilio;
		this.telefono = telefono;
		this.dni = dni;
		this.sexo = sexo;
		this.nacionalidad = nacionalidad;
		this.usuario = usuario;
		this.password = password;
	}
	
	public void deshabilitar() {
		this.habilitado = false;
	}
	
	public boolean tenesDNI(String dni) {
		return this.dni.equals(dni);
	}

	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + codigo;
		return result;
	}

	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Cliente other = (Cliente) obj;
		if (codigo != other.codigo)
			return false;
		return true;
	}
	
	public ClienteDTO getDTO() {
		return new ClienteDTO(codigo, nombre, apellido, fechaNacimiento, domicilio, telefono, dni, sexo, nacionalidad, usuario, password, habilitado);
	}
}
